/*
 * @(#)BaseController.java v2.0 2016年11月22日
 * 百联集团	版权所有
 * 
 * 文件描述...
 *
 * @Title: BaseController.java 
 * @Package com.bailiangroup.gsp.oms.controller 
 * @author tylong
 * @date 2016年11月22日 下午8:15:56
 * @version v2.0
 * 历史版本：
 * 	1. 【2016年11月22日】 创建文件   by tylong
 */
package com.ess.web.controller.base;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;


/**
 * 基础Controller类,其它Controller需要继承此类
 *
 * @author tylong
 * @version v2.0
 * @ClassName: BaseController
 * @date 2016年11月22日 下午8:17:46
 */
@RestController
public class BaseController {

    /**
     * 日志变量
     */
    static final Logger logger = LoggerFactory.getLogger(BaseController.class);

    /**
     * 用户service
     */
    @Autowired
    UserService userService;

    /**
     * 方法描述：   用户id转Name
     * 业务逻辑说明  ：用户id转Name
     *
     * @param list
     * @return
     * @Title: convertUserIdToUserName
     * @date 2016年12月9日 下午6:26:49
     * @author tylong
     * @modifier
     * @modifydate
     */
    public <T> void convertUserIdToUserName(List list) {
        Map<Object, Object> sidMap = new HashMap<Object, Object>();
        if (null != list) {
            //找到所有的无重复用户id
            for (Object obj : list) {
                try {
                    Field fieldCreateUser = obj.getClass().getDeclaredField("createUser");
                    fieldCreateUser.setAccessible(true); //设置属性是可以访问的
                    Field fieldUpdateUser = obj.getClass().getDeclaredField("updateUser");
                    fieldUpdateUser.setAccessible(true); //设置属性是可以访问的
                    Object createUserId = fieldCreateUser.get(obj);
                    Object updateUserId = fieldUpdateUser.get(obj);
                    if (null != createUserId && !sidMap.containsKey(createUserId)) {
                        sidMap.put(createUserId, createUserId);
                    }
                    if (null != updateUserId && !sidMap.containsKey(updateUserId)) {
                        sidMap.put(updateUserId, updateUserId);
                    }
                } catch (Exception e) {
                    logger.error("convertUserIdToUserName", e);
                }
            }
            if (sidMap.size() > 0) {
                List<String> sidList = new ArrayList<String>();
                for (Entry<Object, Object> entry : sidMap.entrySet()) {
                    sidList.add(entry.getKey().toString());
                }
                QueryUserReqDto user = new QueryUserReqDto();
                user.setIsPage("0");
                user.setSidList(sidList);
                try {
                    PageInfo<User> pageInfo = userService.queryUser(user);
                    List<User> userList = pageInfo.getList();
                    for (User ur : userList) {
                        sidMap.put(ur.getSid(), ur.getUserNickname());
                    }
                    for (Object obj : list) {
                        Field fieldCreateUser = obj.getClass().getDeclaredField("createUser");
                        fieldCreateUser.setAccessible(true); //设置属性是可以访问的
                        Field fieldUpdateUser = obj.getClass().getDeclaredField("updateUser");
                        fieldUpdateUser.setAccessible(true); //设置属性是可以访问的
                        Object createUserId = fieldCreateUser.get(obj);
                        Object updateUserId = fieldUpdateUser.get(obj);
                        if (null != createUserId) {
                            fieldCreateUser.set(obj, sidMap.get(createUserId));
                        }
                        if (null != updateUserId) {
                            fieldUpdateUser.set(obj, sidMap.get(updateUserId));
                        }
                    }
                } catch (Exception e) {
                    logger.error("convertUserIdToUserName", e);
                }
            }
        }
    }

    /*
        获取当前登录用户
     */
    public User getCurrentUser() {
        User currentUser = null;
        Subject subject = SecurityUtils.getSubject();
        Session session = subject.getSession();
        Object obj = session.getAttribute("currentUser");
        if (obj != null) {
            currentUser = (User) obj;
        }
        return currentUser;
    }
}